main(List<String> args) {
  // 默认构造函数 不需要写返回值
  // 工厂构造函数, 需要自己手动返回对象
  final p1 = Person.withName("why");
  final p2 = Person.withName("why");
  print(identical(p1, p2));

}
// class Person{
//   String name = "";
//   String color = "";
//   // 传入的name 是相同的,返回相同对象
//   Person(this.name);

// }

class Person{
  String name = "";
  String color = "";

  // set get 方法
  set setName(String name){
    this.name = name;
  }
  get getName{
    return name;
  }
  // static 类属性, 静态
  static final Map<String, Person> _nameCache = {};
  static final Map<String, Person> _colorCache = {};
  Person(this.name, this.color);
  // 1. 从缓存中先获取, 2 创建对象 , 3 加入缓存
  factory Person.withName(String name){
    if (_nameCache.containsKey(name)){
      return _nameCache[name]!;
    }else{
      final p = Person(name, "default");
      _nameCache[name] = p;
      return p;
    }
  }
}